package kata.stringKata;

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class TestStringCalculator {

    /*
     * 首先完成功能，测试通过
          发现坏味道，进行重构（使用Eclipse IDE工具）,重构时，使用快捷键
               代码要求。必须的符合以下规则，否则必须重构:
         1：IF/else语句,while/for语句等,其中的代码应该(尽量)只有一行,就是调用语句.
         2：函数的缩进层不应该多于二层.
         3：函数不得超过5行
         4：函数不能有一行重复
         5：函数体内不能有魔法数
              重构之后，符合以上要求即CleanCode，才完成下一个功能，
     */
    @Test
    public void testAdd(){
        Calculator calculator=new Calculator();

        int result;
        //如果输入的数据为空“”， 返回值为0
        result=calculator.add("");
        assertEquals(0,result);


        //如果输入的数据为 null， 返回值为0
        result=calculator.add(null);
        assertEquals(0,result);

        //如果输入的数据为单个数字， 则返回该值
        result=calculator.add("1");
        assertEquals(1,result);

        //如果输入的数据是多个， 则使用，为分隔符，然后计算他们的累加合计值
        result=calculator.add("1,2");
        assertEquals(3,result);

        //输入为0， 其他值, 同样做累计计算
        result=calculator.add("0,2,3,6");
        assertEquals(11,result);

        //可以使用\n换行作为分隔，
        result=calculator.add("1\n2,3");
        assertEquals(6,result);

        //可以使用多个\n作为分隔
        result=calculator.add("1\n2,3\n6,7");
        assertEquals(19,result);

        //分隔符可以不是“，”符号， 可以换成其他比如；。
        //但是一定是//为开始， 然后是分隔符，然后\n
        result=calculator.add("//;\n1;2");
        assertEquals(3,result);

        result=calculator.add("//;\n1;2;3;4\n5");
        assertEquals(15,result);

        //可以是其他字符作为分隔符，比如换为,
        result=calculator.add("//,\n1,2,3,4,5");
        assertEquals(15,result);

        //大于1000的数字做0处理, 忽略不做合计计算
        result=calculator.add("//,\n1,2,3,10001,1001,84");
        assertEquals(90,result);
//
        //分隔符可以为多个字符，不是单一的某字符，比如[,,,]是,,, .但是使用[]为开始和结束。
        result=calculator.add("//[,,,]\n1,,,2,,,3");
        assertEquals(6,result);

        result=calculator.add("//[,,,,]\n1,,,,2,,,,3,,,,4");
        assertEquals(10,result);

        //可以使用多种分隔符 ，比如[,][%]使用2种,和%分隔符
        result=calculator.add("//[,][%]\n1,2%3%4,5");
        assertEquals(15,result);

	/*	*/
    }
}
